Vertex AI Workbench のユーザー管理のノートブックとインスタンスでroot アクセスを有効・無効で作成した時の差を調べてみた

Vertex AI Workbench のユーザー管理のノートブックとインスタンスでroot アクセスを有効・無効で作成した時の差を調べてみた

Vertex AI Workbench のユーザー管理のノートブックとインスタンスでroot アクセスを有効・無効で作成した時にどういった設定の違いがあるのかを実際に調べてみました。
Clock Icon2024.07.08

データ事業部の根本です。以前、新しい Vertex AI Workbench のユーザー管理のノートブックとインスタンスで root アクセスを無効にするポリシーの記事を書いたときに、rootアクセスを有効・無効にした場合具体的にどういった箇所の設定が変わっているのかが気になっていました。なので今回はその違い実際に調べてみました。

目標

Vertex AI Workbench のユーザー管理のノートブックとインスタンスでrootアクセスを有効・無効にした場合どの設定が変わっているのか確かめることが今回の目標です。
以前rootアクセスを有効にした時は、sudoコマンドをパスワードなしで実行できました(以前のブログで確認済みです。 よって、rootアクセスを有効/無効にした場合sudoersファイルやグループ関連で何か違いがあるのではないかと思っていました。

まずはrootアクセスを有効にしたパターンを調査する

まず、rootアクセスを有効にしてインスタンスを作成してみました。作成後、Vertex AI WorkbenchのコンソールからJupyter Labへアクセスしてterminalにてidコマンドを実行して現在の所属グループなどを確認します。以下が実行コマンドと出力です。

(base) jupyter@instance-20240708-141438:~$id
uid=1000(jupyter) gid=1001(jupyter) groups=1001(jupyter),4(adm),27(sudo),997(docker),1000(google-sudoers)

出力を整理すると以下となります。
ユーザー情報

パラメータ
ユーザーID (UID) 1000 (jupyter)
グループID (GID) 1001 (jupyter)

グループ情報

グループID グループ名 説明
1001 jupyter プライマリグループ
4 adm システムの管理タスクを実行するための特権を持つ
27 sudo sudo コマンドを使用して root 権限でコマンドを実行できる
997 docker Docker コマンドを実行するための特権を持つ
1000 google-sudoers Google Cloud Platform(GCP)環境で特定の管理タスクを実行するための特権を持つ

上記より現在使用しているユーザjupyterが、sudogoogle-sudoersグループに所属していることが確認できました。

それでは続けてsudoersファイルも確認してみます。
以下が実行コマンドと出力(抜粋)です。

(base) jupyter@instance-20240708-141438:~$ sudo cat /etc/sudoers
root    ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d

@includedirでインクルードしている内容は以下でした

%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL

上記より、google-sudoersグループに属しているユーザはすべてのホストで、すべてのユーザーとして、すべてのコマンドをパスワードなしで実行できることになります。
また、NOPASSWD:ALLの設定があるのでrootアクセスをした場合にはsudoコマンドをパスワードなしで使用することができるわけです。

rootアクセスを無効にしたパターンを調査する

rootアクセスを無効にした状態でインスタンスを作成しました。先ほどと同様にコマンドでユーザ情報を確認します。

(base) jupyter@instance-20240708-145641:~$ id
uid=1000(jupyter) gid=1001(jupyter) groups=1001(jupyter),4(adm),997(docker)

出力を整理すると以下となります。
ユーザー情報

パラメータ
ユーザーID (UID) 1000 (jupyter)
グループID (GID) 1001 (jupyter)

グループ情報

グループID グループ名 説明
1001 jupyter プライマリグループ
4 adm システムの管理タスクを実行するための特権を持つ
997 docker Docker コマンドを実行するための特権を持つ

ユーザ情報は特に変更がないですが、グループ情報にsudogoogle-sudoersが見当たりません。
sudoersファイルも確認してみます。
rootアクセスを無効化してインスタンス作成しているため、jupyterユーザにはsudoコマンドを実行することができません。よって今回はCloud Shellからcompute sshコマンドでインスタンスにアクセスしてsudoersファイルを確認しました。compute sshコマンドでインスタンスに接続するとデフォルトではLinux Userのパスワードは設定されていないのでsudo passwdでrootユーザのパスワードを設定することができます。そうすることでsudoコマンドも使えるようになるので確認できるという寸法です。

$ gcloud compute ssh インスタンス名 --zone=asia-northeast1-a

でインスタンスにsshをします。

$ sudo passwd

にてrootユーザのパスワードを設定します。
そしてsudoersを確認します。

$ sudo cat /etc/sudoers
root    ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d

同じですね・・・
つまり、rootアクセスの有効無効ではjupyterユーザの所属グループに違いがある(sudogoogle-sudoersに所属している)ということに起因するようです!

まとめ

以下がrootアクセスを有効・無効にした時のグループをまとめた表です。

rootアクセス有効・無効 グループID グループ名 説明
有効 27 sudo sudo コマンドを使用して root 権限でコマンドを実行できる
有効 1000 google-sudoers Google Cloud Platform(GCP)環境で特定の管理タスク
有効・無効 1001 jupyter プライマリグループ
有効・無効 4 adm システムの管理タスクを実行するための特権を持つ
有効・無効 997 docker Docker コマンドを実行するための特権を持つ

私の持てる知識で確認したところ、rootアクセスを有効化するとインスタンス作成時にsudogoogle-sudoersグループにjupyterユーザを追加してくれるということが結論でした。
他にも差分があるかもなのですが調査しきれませんでした・・・
もしこの記事が、Vertex AIのrootアクセスの有効・無効の違いが気になっているかたのお役に立っていたらとても嬉しいです。それではまた。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.